﻿/**
 *
 * @file FITKAcousticsMaterialsViscoElastic.h
 * @brief 粘弹性材料数据类声明
 * @author XingXuanCi (xingxuanci@diso.cn)
 * @date 2024-10-31
 *
 */
#ifndef FITKACOUSTICSMATERIALSVISCOELASTIC_H
#define FITKACOUSTICSMATERIALSVISCOELASTIC_H

#include "FITKAcousticsAbsMaterial.h"
#include "FITKAcousticsPhysicsAPI.h"

namespace Acoustics
{
    class FITKSpectraShearModulus;
    class FITKSpectraDampingLossFactor;
}

namespace Acoustics
{
    /**
     * @brief  粘弹性材料数据类声明
     * @author XingXuanCi (xingxuanci@diso.cn)
     * @date   2024-10-31
     */
    class FITKAcousticsPhysicsAPI  FITKAcousticsMaterialsViscoElastic : public FITKAcousticsAbsMaterial
    {
        FITKCLASS(Acoustics, FITKAcousticsMaterialsViscoElastic);
    public:
        /**
         * @brief  构造函数
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date   2024-10-31
         */
        explicit FITKAcousticsMaterialsViscoElastic() = default;
        /**
         * @brief  析构函数
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date   2024-10-31
         */
        virtual ~FITKAcousticsMaterialsViscoElastic() = default;
        /**
         * @brief 获取声学材料类型
         * @return AcousticsMaterialType 声学材料类型（粘弹性）
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date 2024-09-29
         */
        FITKAcousticsAbsMaterial::AcousticsMaterialType getAcousticsMaterialType() override;
        /**
         * @brief 获取泊松比（无量纲）
         * @return double 泊松比(无量纲）
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date 2024-09-29
         */
        double getPoissonsRatio() const;
        /**
         * @brief 设置泊松比（无量纲）
         * @param[i] poissonsRatio 泊松比(无量纲）
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date 2024-09-29
         */
        void setPoissonsRatio(double poissonsRatio);
        /**
         * @brief 获取剪切模量频谱ID
         * @return int 剪切模量频谱ID
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date 2024-09-29
         */
        int getShearModulusSpectrumID() const;
        /**
         * @brief 设置剪切模量频谱ID
         * @param[i] shearModulusSpectrumID 剪切模量频谱ID
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date 2024-09-29
         */
        void setShearModulusSpectrumID(int shearModulusSpectrumID);
        /**
         * @brief 获取阻尼损耗因子频谱ID
         * @return int 阻尼损耗因子频谱ID
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date 2024-09-29
         */
        int getDampingSpectrumID() const;
        /**
         * @brief 设置阻尼损耗因子频谱ID
         * @param[i] dampingSpectrumID 阻尼损耗因子频谱ID
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date 2024-09-29
         */
        void setDampingSpectrumID(int dampingSpectrumID);
        /**
        * @brief 复制数据对象,深拷贝，数据id不拷贝
        * @param[i] obj 被拷贝的对象
        * @return 是否执行成功
        * @author XingXuanCi (xingxuanci@diso.cn)
        * @date 2024-11-15
        */
        virtual bool copy(FITKAbstractDataObject* obj) override;
    private:

        /**
         * @brief  粘弹性材料-剪切模量频谱
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date   2024-09-29
         */
        int _shearModulusSpectrumID = -1;
        /**
         * @brief  粘弹性材料-阻尼损耗因子频谱
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date   2024-09-29
         */
        int _dampingSpectrumID = -1;
        /**
         * @brief  粘弹性材料-泊松比（无量纲）
         * @author XingXuanCi (xingxuanci@diso.cn)
         * @date   2024-09-29
         */
        double _poissonsRatio{ 0.0 };
      
    };
}

#endif // FITKACOUSTICSMATERIALSVISCOELASTIC_H
